.SUFFIXES: .c .cpp .o .x .h
# Foldery
DIR = gmros
# Nazwy, ktorych bedziemy uzywac, tu: rdzenie nazw plikow
NAME00 = native
HEADS00 = $(NAME00).h
JNAME00 = Gmros
JHEADS00 = $(JNAME00).h
JNAME00J = $(JNAME00).java
JNAME00C = $(JNAME00).class
LIBMROS = libmros.a
LIST = $(NAME00) $(JNAME00J) $(JHEADS00)
# Kompilator, linker i archiwizer tworzący biblioteki statyczne
CO = g++
LD = $(CO)
AR = ar
JAVAC = javac
JAVA = java
JAVAH = javah
# Flagi kompilatora (C), linkera (L) i archiwizera (AR)
CFLAGS = -Wall -O2
LFLAGS = -Wall -O2
ARFLAGS = rv
# Biblioteki dla linkera
JFLAG0 = -I/usr/include
JFLAG1 = -I/usr/lib/jvm/java-6-sun-1.6.0.22/include
JFLAG2 = -I/usr/lib/jvm/java-6-sun-1.6.0.22/include/linux
LIBSFLAGS = -shared -lgsl -lgslcblas -lm
JDIR = -Djava.library.path=.
LIBS = $(LIBSFLAGS) $(JFLAG0) $(JFLAG1) $(JFLAG2)
# Tzw. regula wzorcowa - mowiaca jak otrzymac pliki .o z .cpp i .h
%.o: %.cpp %.h
	$(CO) $(CFLAGS) -c $< -o $@
%.o: %.cpp
	$(CO) $(CFLAGS) -c $< -o $@
# Regula zaleznosci - uaktualnij pliki po prawej stronie dwukropka.
.PHONY: all
all: $(JNAME00C)
$(JNAME00C): java jni
	$(CO) $(LFLAGS) $(LIBS) $(NAME00).cpp $(LIBMROS) -o lib$(NAME00).so
java:
	$(JAVAC) $(JNAME00J)
jni:
	$(JAVAH) -jni $(JNAME00)
#------------------------------------------------------------------------------
.PHONY: run clean tar stat data
run: $(JNAME00J)
	$(JAVA) $(JDIR) $(JNAME00)
clean:
	rm -f *.o  *~ *.so *.x core core* a.out *.class
tar: clean
	(cd ../../; tar -cvzf $(DIR).tar.gz  $(DIR) )
stat:
	wc *.h *.cpp
data:
	  echo 'char *builddate="' `date` '";' > data.h
